package io.gitee.thghh.dynamic.liquibase.property;

import lombok.ToString;

import java.util.Objects;

/**
 * 动态属性，和{@like liquibase.changelog.ChangeLogParameters}配合使用，可以实现动态函数的功能
 *
 * @author pengzhikang
 * @date 2025/2/11 10:04
 * @since 1.0.0
 */
public abstract class DynamicProperty {

    /**
     * 获取属性名称
     *
     * @return {@link String }
     * @author pengzhikang
     * @date 2025/02/11 10:13
     */
    public abstract String getName();

    /**
     * 获取属性值
     *
     * @return {@link Object }
     * @author pengzhikang
     * @date 2025/02/11 10:13
     */
    public abstract Object getValue();

    /**
     * 数据库管理系统
     *
     * @return {@link String }
     * @author pengzhikang
     * @date 2025/02/11 10:13
     */
    public String getDbms() {
        return null;
    }

    @Override
    public String toString() {
        Object value = getValue();
        Objects.requireNonNull(value, "value must not be null");
        return value.toString();
    }
}
